package com.system.weirdor.www.scheduled;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.system.weirdor.crawler.pipline.CnBlogPinPipeline;
import com.system.weirdor.crawler.processor.CnBlogFetchProcessor;
import com.xiaoleilu.hutool.date.DateUtil;
import com.xiaoleilu.hutool.http.Header;
import com.xiaoleilu.hutool.http.HttpRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import us.codecraft.webmagic.Spider;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by weirdor on 2017/8/24.
 */
@Component
public class ScheduledTasks {

@Autowired
CnBlogPinPipeline CnBlogPinPipeline;
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String username;

    @Scheduled(fixedRate = 30000)
    public void reportCurrentTime() {

        System.out.println("当前时间：" + DateUtil.now());
        Map<String ,Object> paramMap=new HashMap<>();
        paramMap.put("userid","15573660577@163.com");
        paramMap.put("seckey","576d5347bdfa4c6bcb1d9561714eefd2");
        paramMap.put("date","2017-09-30");
        paramMap.put("startStation","上海");
        paramMap.put("arriveStation","常德");
        String url="http://www.chepiao100.com/api/yupiao";
        //链式构建请求
        String result2 = HttpRequest.post(url)
                .header(Header.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36")
                .form(paramMap)
                .execute().body();
        JSONObject jsonObject= JSON.parseObject(result2);
        System.out.println(jsonObject);
        JSONArray jsonArray=jsonObject.getJSONArray("data");

            //获取每一个JsonObject对象
            JSONObject myjObject = jsonArray.getJSONObject(0);
            JSONObject myjObject1 = jsonArray.getJSONObject(1);
            System.out.println((myjObject.getInteger("hard-sleeper")));
            System.out.println((myjObject1.getInteger("hard-sleeper")));
            if (myjObject.getString("trainCode").equals("K1373")){
                if (myjObject.getInteger("hard-sleeper")!=0){
                    SimpleMailMessage message = new SimpleMailMessage();
                    message.setFrom(username);
                    message.setTo("179946422@qq.com");
                    message.setSubject("主题：12306票");
                    message.setText("K1373有票了");
                    javaMailSender.send(message);
                }
            }
            if (myjObject1.getString("trainCode").equals("K807")){
                if (myjObject1.getInteger("hard-sleeper")!=0){
                    SimpleMailMessage message = new SimpleMailMessage();
                    message.setFrom(username);
                    message.setTo("179946422@qq.com");
                    message.setSubject("主题：12306票");
                    message.setText("K807有票了");
                    javaMailSender.send(message);
                }
            }
    }

    /**
     * 字段	 	允许值	 	允许的特殊字符
     * 秒	 	0-59	 	, - * /
     * 分	 	0-59	 	, - * /
     * 小时	 	0-23	 	, - * /
     * 日期	 	1-31	 	, - *   / L W C
     * 月份	 	1-12 或者 JAN-DEC	 	, - * /
     * 星期	 	1-7 或者 SUN-SAT	 	, - *   / L C #
     * 年（可选）	 	留空, 1970-2099	 	, - * /
     *
     * “*”字符被用来指定所有的值。如：”*“在分钟的字段域里表示“每分钟”。
     “-”字符被用来指定一个范围。如：“10-12”在小时域意味着“10点、11点、12点”。
     “,”字符被用来指定另外的值。如：“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
     “?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候，它是有用的。看下面的例子你就会明白。
     “L”字符指定在月或者星期中的某天（最后一天）。即“Last ”的缩写。但是在星期和月中“Ｌ”表示不同的意思，如：在月子段中“L”指月份的最后一天-1月31日，2月28日，如果在星期字段中则简单的表示为“7”或者“SAT”。如果在星期字段中在某个value值得后面，则表示“某月的最后一个星期value”,如“6L”表示某月的最后一个星期五。
     “W”字符只能用在月份字段中，该字段指定了离指定日期最近的那个星期日。
     “#”字符只能用在星期字段，该字段指定了第几个星期value在某月中
     **/

    //每1分钟执行一次
    @Scheduled(cron = "0 */1 *  * * * ")
    public void reportCurrentByCron() {
        System.out.println("Scheduling Tasks Examples By Cron: The time is now " + DateUtil.now());
//
//        System.out.println("开始爬取...");
//
//        Spider oschinaSpider = Spider.create(new CnBlogFetchProcessor()).addUrl(
//                "https://www.cnblogs.com/");
//        oschinaSpider.addPipeline(CnBlogPinPipeline);
//        // 设置线程数
//        oschinaSpider.thread(5);
//        oschinaSpider.setExitWhenComplete(true);
//        oschinaSpider.run();
    }
}
